package com.liru.neo4j_demo.repository;

import com.liru.neo4j_demo.model.Entity;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
 * 实体仓库接口
 */
public interface EntityRepository extends Neo4jRepository<Entity, Long> {

    /**
     * 根据知识ID和实体类型查找实体
     * @param knowledgeId 知识ID
     * @param type 实体类型
     * @return 实体列表
     */
    List<Entity> findByKnowledgeIdAndType(String knowledgeId, String type);

    /**
     * 根据知识ID和名称查找实体
     * @param knowledgeId 知识ID
     * @param name 实体名称
     * @return 实体
     */
    Entity findByKnowledgeIdAndName(String knowledgeId, String name);

    /**
     * 查找与指定实体有关系的其他实体
     * @param entityId 实体ID
     * @param knowledgeId 知识ID
     * @return 实体列表
     */
    @Query("MATCH (e1:Entity)-[:RELATION {knowledgeId: $knowledgeId}]->(e2:Entity) WHERE id(e1) = $entityId RETURN e2")
    List<Entity> findRelatedEntities(@Param("entityId") Long entityId, @Param("knowledgeId") String knowledgeId);
}